﻿using System;
using System.Web.UI;
using System.IO;

/// <summary>
///WriteRunLogFile 的摘要说明
/// </summary>
public class WriteRunLogFile
{
    private string[] userInfo;//用户信息
    public WriteRunLogFile()
    {
        userInfo = GetUserInfo();
        //
        //TODO: 在此处添加构造函数逻辑
        //
    }
    /// <summary>
    /// 检测文件是否存在
    /// </summary>
    /// <param name="filePath">文件路径</param>
    /// <param name="isWrite">不存在时是否创建</param>
    private void Exists(string filePath, bool isWrite)
    {
        if (!Directory.Exists(filePath) && isWrite)
        {
            Directory.CreateDirectory(filePath);
        }
    }
    /// <summary>
    /// 获取文件路径
    /// </summary>
    /// <param name="type">日志类型</param>
    /// <returns></returns>
    private string GetFilePath(string type)
    {
        string filePath = string.Empty;
        filePath = AppDomain.CurrentDomain.BaseDirectory + "\\log";
        Exists(filePath, true);
        filePath += "\\" + type + DateTime.Now.ToString("yyyyMMdd") + ".log";
        return filePath;
    }
    /// <summary>
    /// 获取用户信息
    /// </summary>
    /// <returns></returns>
    private string[] GetUserInfo()
    {
        string[] userinfo = new string[4];
        userinfo[0] = GetCookies.UnitIsn;
        userinfo[1] = GetCookies.UserIP;
        userinfo[2] = GetCookies.UserMAC;
        userinfo[3] = GetCookies.UserName;
        return userinfo;
    }
    /// <summary>
    /// WriteLogFile() 写日志文件 并上传Ftp
    /// </summary>
    /// <param name="createTime">操作时间</param>
    /// <param name="userName">操作用户</param>
    /// <param name="ip">操作客户端IP</param>
    /// <param name="logType">日志类型：1、调试日志2、告警日志3、错误日志</param>
    /// <param name="logLevel">日志级别：1、一般 2、重大 3、致命</param>
    /// <param name="logContent">日志内容</param>
    public void WriteLogFile(string createTime, string userName, string ip, string logType, string logLevel, string logContent)
    {
        /**/
        ///指定日志文件的目录
        //string fname = Server.MapPath("log") + "\\logfile.txt";
        // string fname = "D:\\log\\综合网管_" + DateTime.Now.ToString("yyyyMMdd") + ".log";
        string fname = GetFilePath("综合网管_");
        // string fname = "D:\\综合网管_" + DateTime.Now.ToString("yyyyMMdd") + ".log";
        /**/
        ///定义文件信息对象
        FileInfo finfo = new FileInfo(fname);

        ///**/
        /////判断文件是否存在以及是否大于2K
        //if (finfo.Exists && finfo.Length > 2048)
        //{
        //    /**/
        //    ///删除该文件
        //    finfo.Delete();
        //}
        /**/
        ///创建只写文件流
        using (FileStream fs = finfo.OpenWrite())
        {
            /**/
            ///根据上面创建的文件流创建写数据流
            StreamWriter w = new StreamWriter(fs);

            /**/
            ///设置写数据流的起始位置为文件流的末尾
            w.BaseStream.Seek(0, SeekOrigin.End);

            //    w.Write("\nLog Entry : ");

            /**/
            ///写入当前系统时间并换行
            w.Write("{0} \0{1}\0{2}\r\n", createTime, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff"),
                "用户ID:" + userInfo[0] + ",用户名称:" + userInfo[3] + ",用户IP:" + userInfo[1] + ",用户MAC:" + userInfo[2]);

            /**/
            ///写入日志内容并换行
            ///
            w.Write("------------------------------------ \r\n");
            w.Write(userName + "  " + ip + "  error " + logType + "  " + logLevel + " \r\n");
            w.Write("失败原因：  " + logContent + "\r\n");

            /**/
            ///写入------------------------------------“并换行
            w.Write("------------------------------------\r\n");

            /**/
            ///清空缓冲区内容，并把缓冲区内容写入基础流
            w.Flush();

            /**/
            ///关闭写数据流
            w.Close();
        }
    }
    public void WriteLogFileAlarm(string createTime, string operate)
    {
        /**/
        ///指定日志文件的目录
        //string fname = Server.MapPath("log") + "\\logfile.txt";
        //   string fname = new Page().Server.MapPath("../log/") + "alarm" + DateTime.Now.ToString("yyyyMMdd") + ".log";
        string fname = GetFilePath("alarm");
        /**/
        ///定义文件信息对象
        FileInfo finfo = new FileInfo(fname);

        ///**/
        /////判断文件是否存在以及是否大于2K
        //if (finfo.Exists && finfo.Length > 204800)
        //{
        //    /**/
        //    ///删除该文件
        //    finfo.Delete();
        //}
        /**/
        ///创建只写文件流
        using (FileStream fs = finfo.OpenWrite())
        {
            /**/
            ///根据上面创建的文件流创建写数据流
            StreamWriter w = new StreamWriter(fs);

            /**/
            ///设置写数据流的起始位置为文件流的末尾
            w.BaseStream.Seek(0, SeekOrigin.End);

            //    w.Write("\nLog Entry : ");

            /**/
            ///写入当前系统时间并换行
            //w.Write("{0} {1} \r\n", DateTime.Now.ToLongTimeString(),
            // DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
            w.Write("{0} \0{1}\0{2}\r\n", createTime, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff"),
                "用户ID:" + userInfo[0] + ",用户名称:" + userInfo[3] + ",用户IP:" + userInfo[1] + ",用户MAC:" + userInfo[2]);
            /**/
            ///写入日志内容并换行
            ///
            w.Write("------------------------------------ \r\n");
            w.Write("操作：  " + operate + "\r\n");

            /**/
            ///写入------------------------------------“并换行
            w.Write("------------------------------------\r\n");

            /**/
            ///清空缓冲区内容，并把缓冲区内容写入基础流
            w.Flush();

            /**/
            ///关闭写数据流
            w.Close();
        }
    }
    public void WriteLogFileLogin(string createTime, string operate)
    {
        /**/
        ///指定日志文件的目录
        //string fname = Server.MapPath("log") + "\\logfile.txt";
        // string fname = new Page().Server.MapPath("log") + "\\login" + DateTime.Now.ToString("yyyyMMdd") + ".log";
        string fname = GetFilePath("login");
        /**/
        ///定义文件信息对象
        FileInfo finfo = new FileInfo(fname);

        ///**/
        /////判断文件是否存在以及是否大于2K
        //if (finfo.Exists && finfo.Length > 204800)
        //{
        //    /**/
        //    ///删除该文件
        //    finfo.Delete();
        //}
        /**/
        ///创建只写文件流
        using (FileStream fs = finfo.OpenWrite())
        {
            /**/
            ///根据上面创建的文件流创建写数据流
            StreamWriter w = new StreamWriter(fs);

            /**/
            ///设置写数据流的起始位置为文件流的末尾
            w.BaseStream.Seek(0, SeekOrigin.End);

            //    w.Write("\nLog Entry : ");

            /**/
            ///写入当前系统时间并换行
            //w.Write("{0} {1} \r\n", DateTime.Now.ToLongTimeString(),
            // DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
            w.Write("{0} \0{1}\0{2}\r\n", createTime, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff"),
                "用户ID:" + userInfo[0] + ",用户名称:" + userInfo[3] + ",用户IP:" + userInfo[1] + ",用户MAC:" + userInfo[2]);
            /**/
            ///写入日志内容并换行
            ///
            w.Write("------------------------------------ \r\n");
            w.Write("登录：  " + operate + "\r\n");

            /**/
            ///写入------------------------------------“并换行
            w.Write("------------------------------------\r\n");

            /**/
            ///清空缓冲区内容，并把缓冲区内容写入基础流
            w.Flush();

            /**/
            ///关闭写数据流
            w.Close();
        }
    }
    /// <summary>
    /// 记录操作日志
    /// </summary>
    /// <param name="startTime">操作开始时间</param>
    /// <param name="operate">操作内容</param>
    public void WriteLogFileOperate(string startTime, string operate)
    {
        /**/
        ///指定日志文件的目录
        string fname = GetFilePath("Operate");

        /**/
        ///定义文件信息对象
        FileInfo finfo = new FileInfo(fname);

        ///**/
        /////判断文件是否存在以及是否大于2K
        //if (finfo.Exists && finfo.Length > 204800)
        //{
        //    /**/
        //    ///删除该文件
        //    finfo.Delete();
        //}
        /**/
        ///创建只写文件流
        using (FileStream fs = finfo.OpenWrite())
        {
            /**/
            ///根据上面创建的文件流创建写数据流
            StreamWriter w = new StreamWriter(fs);

            /**/
            ///设置写数据流的起始位置为文件流的末尾
            w.BaseStream.Seek(0, SeekOrigin.End);

            //    w.Write("\nLog Entry : ");

            /**/
            ///写入当前系统时间并换行
            //w.Write("{0} {1} \r\n", startTime, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":" + DateTime.Now.Millisecond.ToString());//记录到毫秒级别
            w.Write("{0} \0{1}\0{2}\r\n", startTime, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff"),
                "用户ID:" + userInfo[0] + ",用户名称:" + userInfo[3] + ",用户IP:" + userInfo[1] + ",用户MAC:" + userInfo[2]);
            /**/
            ///写入日志内容并换行
            ///
            w.Write("\0" + operate + "\r\n");

            /**/
            ///写入------------------------------------“并换行
            w.Write("\r\n");

            /**/
            ///清空缓冲区内容，并把缓冲区内容写入基础流
            w.Flush();

            /**/
            ///关闭写数据流
            w.Close();
        }
    }
}
